package org.example.demo1.DAO;

import org.apache.ibatis.annotations.Param;
import org.example.demo1.Entity.VisitRecord;
import java.util.List;
import java.util.Map;

public interface VisitRecordDao {
    
    /**
     * 插入或更新访问记录
     * @param visitRecord 访问记录
     * @return 影响的行数
     */
    int insertOrUpdateVisitRecord(VisitRecord visitRecord);
    
    /**
     * 根据用户ID和小说ID获取访问记录列表
     * @param params 参数Map（包含userId, novelId等）
     * @return 访问记录列表
     */
    List<VisitRecord> getVisitRecordsByUserAndNovel(Map<String, Object> params);
    
    /**
     * 获取用户最近的访问记录
     * @param userId 用户ID
     * @param limit 限制数量
     * @return 访问记录列表
     */
    List<VisitRecord> getRecentVisitRecords(@Param("userId") Long userId, @Param("limit") Integer limit);
    
    /**
     * 检查是否存在相同的访问记录（同一用户、同一章节、在指定时间内）
     * @param userId 用户ID
     * @param chapterId 章节ID
     * @param timeThreshold 时间阈值（分钟）
     * @return 访问记录
     */
    VisitRecord findRecentVisitRecord(@Param("userId") Long userId, 
                                     @Param("chapterId") Integer chapterId, 
                                     @Param("timeThreshold") Integer timeThreshold);
    
    /**
     * 更新访问时间
     * @param visitId 访问记录ID
     * @return 影响的行数
     */
    int updateVisitTime(@Param("visitId") Integer visitId);

    /**
     * 查找用户在指定小说的最新访问记录
     */
    VisitRecord findLatestVisitRecordByUserAndNovel(@Param("userId") Long userId, 
                                                   @Param("novelId") Integer novelId);

    /**
     * 更新访问记录的章节和时间
     */
    int updateVisitRecord(@Param("visitId") Integer visitId, 
                         @Param("chapterId") Integer chapterId);
}